home *** CD-ROM | disk | FTP | other *** search
Wrap
RESERVE 64*1024 good_color|=15 ON BREAK GOSUB quit CLS DEFMOUSE 0 souris_block|=5 rez%=XBIOS(4) IF rez%<>0 ALERT 1,"ST LOW-RES ONLY",1,"[ CHANGE ]",dummy% END ENDIF current_path$=CHR$(GEMDOS(25)+65)+":"+DIR$(0)+"\" path_pi1$=current_path$+"*.blk" path_map$=current_path$+"*.map" bugbuster$=STRING$(100*40,0) freemem%=GEMDOS(72,L:-1) freemem%=freemem%-4*1024 !JUST FOR 512ko machines compatibility ! adr_free%=GEMDOS(72,L:freemem%) memory%=adr_free% palette%=adr_free% @mem(32) sav_screen%=adr_free% @mem(32000) icone%=adr_free% @mem(2560) color%=adr_free% @mem(32) old_buffer%=adr_free% @mem(2) FOR t|=0 TO 15 ink%=XBIOS(7,t|,-1) DPOKE color%+t|*2,ink% NEXT t| art%=adr_free% @mem(900) BLOAD "edmap3_2.b",art% art2%=art%+4 click%=adr_free% @mem(100) BLOAD "click.b",click% ~C:click%() block_buffer%=adr_free% @mem(480) !20*12*2 map%=adr_free% @mem(64*1024) buffer%=adr_free% @mem(2) screen%=adr_free% ligne%=0 ' ' ' HIDEM @affich_ic @charge_blk @affiche_ligne_block block_set%=9 block%=9 @inverse_old SHOWM ' largeur&=40 hauteur&=20 taille%=largeur&*hauteur&*2 @clear @affiche_infos ' ***************************************************************************** main_loop: @test_mous IF block%<>20 IF block%<>block_set% block_set%=block% @inverse_block ENDIF ENDIF ON box% GOSUB charge_blk,load_map,save_map,clear_r,change_size,bl_left,bl_right,info,change_color,left,up,down,right,get_block,paste_block,pick_block,dummy,dummy,undo,quit IF box%>29 r_but%=box%-30 ON r_but% GOSUB dummy,dummy,dummy,dummy,dummy,big_left,big_right,dummy,dummy,left,up,down,right ENDIF GOTO main_loop ' ****************************************************************************** > PROCEDURE dummy RETURN > PROCEDURE affiche_infos TEXT 0,166,"WIDTH:" TEXT 64,166," " TEXT 64,166,largeur& TEXT 96,166,"HEIGHT:" TEXT 160,166," " TEXT 160,166,hauteur& TEXT 192,166,"XPOS:" TEXT 232,166," " TEXT 232,166,x_window& TEXT 256,166,"YPOS:" TEXT 296,166," " TEXT 296,166,y_window& RETURN > PROCEDURE info HIDEM BMOVE XBIOS(3),sav_screen%,32000 ~XBIOS(6,L:color%) CLS PRINT " EDMAP V3.2" PRINT " BY" PRINT " BUG BUSTER" PRINT " from" PRINT " ART OF CODE" PRINT " As no other Map Editor is swapped" PRINT " officially, I decided to release mine." PRINT " I hope you'll like it !" PRINT " If you use it, and like it, please" PRINT " credit me in your demos and games" PRINT PRINT " My adress is:" PRINT " STEPHANE LANDIER" PRINT " 23, RUE DES ECOLES" PRINT " 41100 THORE LA ROCHETTE" PRINT " TEL:54-72-71-40" PRINT PRINT " I AM NOT INTERESTED IN CRACKED SOFTS !" PRINT "P.S:Now there are keyboard-cuts for SSM" PRINT "& block functions for DUNS of VOYAGERS" ~INP(2) CLS PRINT "Art Of Code has signed a pact with The" PRINT "Voyagers to make demos together." PRINT "The Alliance is called ENIGMA !" PRINT "" PRINT "I would like to greet, in no special" PRINT "order: RESCATOR,LCC,SHURIKENS,DUNS" PRINT "Of Voyagers+Speeder for being cool guys!" PRINT "" PRINT "Hello Future Minds your Coding Party" PRINT "was very cool !" ~INP(2) ~XBIOS(6,L:palette%) BMOVE sav_screen%,XBIOS(3),32000 SHOWM RETURN > PROCEDURE left @set_step x_window&=x_window&-step| IF x_window&<0 x_window&=0 ENDIF @affiche_map RETURN > PROCEDURE up @set_step y_window&=y_window&-step| IF y_window&<0 y_window&=0 ENDIF @affiche_map RETURN > PROCEDURE down @set_step y_window&=y_window&+step| IF y_window&>(hauteur&-10) y_window&=hauteur&-10 ENDIF @affiche_map RETURN > PROCEDURE right @set_step x_window&=x_window&+step| IF x_window&>(largeur&-20) x_window&=(largeur&-20) ENDIF @affiche_map RETURN > PROCEDURE set_step IF box%>=40 step|=5 ELSE step|=1 ENDIF RETURN > PROCEDURE big_left ligne%=ligne%-2560 IF ligne%<0 ligne%=0 ENDIF @tempo @affiche_ligne_block @inverse_old RETURN > PROCEDURE bl_left ligne%=ligne%-128 IF ligne%<0 ligne%=0 ENDIF @affiche_ligne_block @inverse_old RETURN > PROCEDURE big_right FOR t%=0 TO 19 IF ligne%<(nb_bloc&-20)*128 ligne%=ligne%+128 ENDIF NEXT t% @tempo @affiche_ligne_block @inverse_old RETURN > PROCEDURE bl_right IF ligne%<(nb_bloc&-20)*128 ligne%=ligne%+128 ENDIF @affiche_ligne_block @inverse_old RETURN ' ******************************************************************************* > PROCEDURE get_block COLOR good_color| REPEAT UNTIL MOUSEK=0 DEFMOUSE souris_block| REPEAT @affiche_map x_start&=(MOUSEX AND &HFFF0) y_start&=(MOUSEY AND &HFFF0) flag_out|=0 IF y_start&>144 y_start&=144 flag_out|=1 ENDIF LINE 0,y_start&,319,y_start& LINE x_start&,0,x_start&,159 UNTIL MOUSEK=1 IF flag_out|=1 PRINT CHR$(7) GOTO fin_get_block ENDIF IF y_start&>144 y_start&=144 ENDIF REPEAT @affiche_map x_end&=(MOUSEX AND &HFFF0)+15 !si bug enlever les ANDs y_end&=(MOUSEY AND &HFFF0)+15 IF x_end&<=x_start& x_end&=x_start&+15 ENDIF IF y_end&<=y_start& y_end&=y_start&+15 ENDIF IF y_end&>159 y_end&=159 ENDIF LINE x_start&,y_start&,x_end&,y_start& LINE x_end&,y_start&,x_end&,y_end& LINE x_end&,y_end&,x_start&,y_end& LINE x_start&,y_end&,x_start&,y_start& UNTIL MOUSEK<>1 x_start&=x_start&/16 y_start&=y_start&/16 x_end&=(x_end&/16)+1 !si bug rajouter 1 a x et y_end& y_end&=(y_end&/16)+1 hauteur_du_block&=(y_end&-y_start&)-1 largeur_du_block&=(x_end&-x_start&) block_buffer2%=block_buffer% copie_dans_buffer: adr_ds_map_du_buffer%=map%+((x_window&+x_start&+(y_window&+y_start&)*largeur&)*2) BMOVE adr_ds_map_du_buffer%,block_buffer2%,largeur_du_block&*2 block_buffer2%=block_buffer2%+largeur_du_block&*2 INC y_start& IF y_start&<y_end& GOTO copie_dans_buffer ENDIF fin_get_block: REPEAT UNTIL MOUSEK=0 @affiche_map DEFMOUSE 0 RETURN > PROCEDURE paste_block REPEAT UNTIL MOUSEK=0 DEFMOUSE souris_block| REPEAT x&=MOUSEX y&=MOUSEY UNTIL MOUSEK=1 IF y&>159 PRINT CHR$(7) GOTO fin_paste ENDIF x&=x&/16 y&=y&/16 IF x_window&+x&+largeur_du_block&>largeur& PRINT CHR$(7) @depasse GOTO fin_paste ENDIF IF y_window&+y&+hauteur_du_block&>hauteur& PRINT CHR$(7) @depasse GOTO fin_paste ENDIF block_buffer2%=block_buffer% yhauteur&=y&+hauteur_du_block& paste_block: adr_ds_map%=map%+((x_window&+x&+(y_window&+y&)*largeur&)*2) BMOVE block_buffer2%,adr_ds_map%,largeur_du_block&*2 ADD block_buffer2%,largeur_du_block&*2 INC y& IF y&<=yhauteur& GOTO paste_block ENDIF @affiche_map fin_paste: DEFMOUSE 0 REPEAT UNTIL MOUSEK=0 RETURN > PROCEDURE depasse ALERT 1," THE OBJECT WOULD BE | OUT OF THE MAP ! ",1,"[OK]",dummy% RETURN > PROCEDURE undo adr_ds_map%=map%+((undo_x_window&+undo_map_x&+(undo_y_window&+undo_map_y&)*largeur&)*2) BMOVE old_buffer%,adr_ds_map%,2 x_window&=undo_x_window& y_window&=undo_y_window& @affiche_map flag_undo|=1 RETURN > PROCEDURE quit ALERT 3,"DO YOU REALLY WANNA QUIT ?",1,"[OUI]|NON",dummy% IF dummy%<>2 click%=click%+2 ~C:click%() ~XBIOS(6,L:color%) a%=GEMDOS(73,L:memory%) END ENDIF RETURN ' > PROCEDURE tempo VSYNC VSYNC VSYNC VSYNC VSYNC RETURN > PROCEDURE clear_r ALERT 1,"CLEAR ?",1,"[OK]|CANCEL",dummy% IF dummy%<>2 @clear ENDIF RETURN > PROCEDURE clear FOR t%=map% TO map%+taille% POKE t%,0 NEXT t% @affiche_map map_x&=0 map_y&=0 x_window&=0 y_window&=0 RETURN > PROCEDURE change_size ALERT 3,"CHANGE SIZE ?",1,"OK|[CANCEL]",dummy% IF dummy%<>2 HIDEM BMOVE XBIOS(3),sav_screen%,32000 ~XBIOS(6,L:color%) CLS ask1: INPUT "WIDTH (>19) ";largeur& IF largeur&<20 GOTO ask1 ENDIF ask2: INPUT "HEIGHT (>9) ";hauteur& IF hauteur&<10 GOTO ask2 ENDIF @init_map IF over%<0 ALERT 1,"TOO BIG |NOT ENOUGH MEMORY",1,"[OK]",dummy% GOTO ask1 ENDIF PRINT "CLEARING MAP-PLEASE WAIT !" @clear ~XBIOS(6,L:palette%) BMOVE sav_screen%,XBIOS(3),32000 SHOWM @affiche_map @affiche_ligne_block @inverse_old ENDIF RETURN > PROCEDURE affich_ic BLOAD "edmap3_2.rsc",icone% flag%=0 @change_plan RETURN > PROCEDURE change_color ALERT 1,"WHAT COLOR DO YOU WHISH|TO CHANGE ?",1,"[BACK]|[ICON]|[LINE]",dummy% SELECT dummy% CASE 1 @change_fond CASE 2 @change_plan CASE 3 @change_trait ENDSELECT RETURN > PROCEDURE change_fond @tempo fond&=DPEEK(palette%) fond&=fond& XOR &HFFF DPOKE palette%,fond& ~XBIOS(6,L:palette%) RETURN > PROCEDURE change_plan @tempo flag%=flag% XOR 2 BMOVE icone%,XBIOS(2)+29440+flag%,2560 RETURN > PROCEDURE change_trait good_color|=good_color| XOR 1 RETURN > PROCEDURE test_mous debut_test: @affiche_infos REPEAT a$=INKEY$ bouton%=MOUSEK UNTIL bouton%=1 OR bouton%=2 OR LEN(a$)<>0 IF LEN(a$)<>0 IF a$="8" @up ENDIF IF a$="2" @down ENDIF IF a$="4" @left ENDIF IF a$="6" @right ENDIF IF a$="1" @bl_left ENDIF IF a$="3" @bl_right ENDIF IF a$="7" @big_left ENDIF IF a$="9" @big_right ENDIF GOTO debut_test ENDIF y%=MOUSEY x%=MOUSEX IF y%<160 map_y&=INT(y%/16) map_x&=INT(x%/16) box%=0 IF flag_undo|=1 GOTO suite ENDIF IF flag_undo2%=0 GOTO suite ENDIF IF map_y&<>old_map_y& GOTO suite ENDIF IF map_x&<>old_map_x& GOTO suite ENDIF IF bouton%<>old_bouton% GOTO suite ENDIF GOTO end_loop2 suite: IF bouton%=1 @ok flag_undo2%=1 ENDIF IF bouton%=2 @clear_bloc flag_undo2%=1 ENDIF GOTO end_loop2 ENDIF IF bouton%=2 IF y%>184 box%=INT(x%/16)+31 flag_undo2%=0 GOTO end_loop2 ENDIF ENDIF IF y%>184 box%=INT(x%/16)+1 flag_undo2%=0 GOTO end_loop2 ENDIF IF y%>184-16 box%=21 block%=INT(x%/16) flag_undo2%=0 ENDIF end_loop2: old_map_x&=map_x& old_map_y&=map_y& old_bouton%=bouton% flag_undo|=0 RETURN ' > PROCEDURE init_map over%=0 taille%=hauteur&*largeur&*2 IF map%+taille%>=screen% over%=-1 ENDIF RETURN > PROCEDURE charge_blk again: path$=path_pi1$ titre$="LOADING BLOCKS" @fileselector IF RIGHT$(file$)="\" ALERT 3,"Il est ou le fichier ?",1,"Bonchien",dummy% GOTO again ENDIF IF file$="" IF flag&=1 GOTO fin_charge_blk ENDIF GOTO again ENDIF file2&=INSTR(file$,".") file2$=LEFT$(file$,file2&) file2$=file2$+"PAL" IF EXIST(file$) OPEN "i",#1,file$ long%=LOF(#1) IF long%>=freemem% CLOSE #1 ALERT 1,"NOT ENOUGH MEMORY",1,"[OK]",dummy% GOTO fin_charge_blk ENDIF BGET #1,screen%,long% CLOSE #1 nb_bloc&=long%/128 ligne%=0 @affiche_ligne_block @inverse_old @clear flag&=1 ENDIF IF EXIST(file2$) OPEN "i",#1,file2$ BGET #1,palette%,32 ~XBIOS(6,L:palette%) CLOSE #1 ENDIF fin_charge_blk: RETURN ' > PROCEDURE fileselector FILESELECT #titre$,path$,fich_prop$,file$ RETURN ' > PROCEDURE affiche_ligne_block LPOKE art%+16,screen%+ligne% ~C:art%() RETURN ' > PROCEDURE inverse_old old_block%=block_set% HIDEM adr%=XBIOS(2)+26880 offset%=adr%+old_block%*8 @inv SHOWM RETURN ' > PROCEDURE inverse_block HIDEM adr%=XBIOS(2)+26880 offset%=adr%+old_block%*8 @inv old_block%=block_set% offset%=adr%+block_set%*8 @inv fin_inv: SHOWM RETURN ' > PROCEDURE inv FOR t%=0 TO 15 a%=LPEEK(offset%) a%=a% XOR &H4 LPOKE offset%,a% offset%=offset%+160 NEXT t% RETURN ' > PROCEDURE ok undo_map_x&=map_x& undo_map_y&=map_y& undo_x_window&=x_window& undo_y_window&=y_window& undo_ligne%=ligne% adr_ds_map%=map%+((x_window&+map_x&+(y_window&+map_y&)*largeur&)*2) BMOVE adr_ds_map%,old_buffer%,2 DPOKE adr_ds_map%,ligne%/128+block_set% mask%=&HFFFFFFFF dest%=XBIOS(2)+map_y&*(160*16)+map_x&*8 source%=screen%+ligne%+block_set%*128 FOR t%=0 TO 15 BMOVE source%,dest%,8 source%=source%+8 dest%=dest%+160 NEXT t% RETURN ' > PROCEDURE clear_bloc undo_map_x&=map_x& undo_map_y&=map_y& undo_x_window&=x_window& undo_y_window&=y_window& undo_ligne%=ligne% adr_ds_map%=map%+((x_window&+map_x&+(y_window&+map_y&)*largeur&)*2) BMOVE adr_ds_map%,old_buffer%,2 DPOKE adr_ds_map%,0 @clear_bloc2 RETURN ' > PROCEDURE clear_bloc2 dest%=XBIOS(2)+map_y&*(16*160)+map_x&*8 source%=screen% FOR t%=0 TO 15 BMOVE source%,dest%,8 source%=source%+8 dest%=dest%+160 NEXT t% RETURN ' > PROCEDURE mem(nombre%) ADD adr_free%,nombre% SUB freemem%,nombre% RETURN ' > PROCEDURE affiche_map HIDEM LPOKE art%+6,map% DPOKE art%+10,x_window& DPOKE art%+12,y_window& DPOKE art%+14,largeur& LPOKE art%+16,screen% DPOKE art%+20,9 ~C:art2%() SHOWM RETURN > PROCEDURE affiche_map2 HIDEM LPOKE art%+6,V:bugbuster$ DPOKE art%+10,0 DPOKE art%+12,y_pick& DPOKE art%+14,20 LPOKE art%+16,screen% DPOKE art%+20,11 ~C:art2%() SHOWM RETURN ' > PROCEDURE load_map path$=path_map$ titre$="LOADING MAP" @fileselector IF RIGHT$(file$)="\" ALERT 3,"Il est ou le fichier ?",1,"Bonchien",dummy% GOTO fin_load_map ENDIF IF file$="" GOTO fin_load_map ENDIF IF EXIST(file$) OPEN "i",#1,file$ BGET #1,buffer%,2 largeur&=DPEEK(buffer%) BGET #1,buffer%,2 hauteur&=DPEEK(buffer%) @init_map @clear BGET #1,map%,taille% CLOSE #1 @affiche_map ENDIF fin_load_map: @affiche_ligne_block @inverse_old RETURN ' > PROCEDURE save_map path$=path_map$ titre$="SAVING MAP" @fileselector IF file$="" GOTO fin_save_map ENDIF drive$=LEFT$(file$) IF taille%+4>DFREE(drive%) ALERT 3," NOT ENOUGH|SPACE ON DISK",1,"[OK]",dummy% GOTO fin_save_map ENDIF OPEN "o",#1,file$ DPOKE buffer%,largeur& BPUT #1,buffer%,2 DPOKE buffer%,hauteur& BPUT #1,buffer%,2 BPUT #1,map%,taille% CLOSE #1 fin_save_map: @affiche_ligne_block @inverse_old RETURN ' PROCEDURE pick_block BMOVE XBIOS(3),sav_screen%,32000 CLS y_pick&=0 nb_ligne_pick&=INT((nb_bloc&-1)/20)+1 FOR t|=0 TO 3999 POKE (V:bugbuster$)+t|,0 NEXT t| FOR t&=0 TO nb_bloc&-1 DPOKE (V:bugbuster$)+t&*2,t& NEXT t& REPEAT @tempo y%=MOUSEY IF y%<1 IF y_pick&>0 DEC y_pick& ENDIF ENDIF IF y%>192 IF y_pick&<nb_ligne_pick&-12 INC y_pick& ENDIF ENDIF @affiche_map2 UNTIL MOUSEK=1 COLOR good_color| ' REPEAT ' UNTIL MOUSEK=0 DEFMOUSE souris_block| REPEAT @affiche_map2 x_start&=(MOUSEX AND &HFFF0) y_start&=(MOUSEY AND &HFFF0) flag_out|=0 IF y_start&>176 y_start&=176 flag_out|=1 ENDIF LINE 0,y_start&,319,y_start& LINE x_start&,0,x_start&,191 UNTIL MOUSEK=1 IF flag_out|=1 PRINT CHR$(7) GOTO fin_get_block2 ENDIF IF y_start&>176 y_start&=176 ENDIF REPEAT @affiche_map2 x_end&=(MOUSEX AND &HFFF0)+15 !si bug enlever les ANDs y_end&=(MOUSEY AND &HFFF0)+15 IF x_end&<=x_start& x_end&=x_start&+15 ENDIF IF y_end&<=y_start& y_end&=y_start&+15 ENDIF IF y_end&>191 y_end&=191 ENDIF LINE x_start&,y_start&,x_end&,y_start& LINE x_end&,y_start&,x_end&,y_end& LINE x_end&,y_end&,x_start&,y_end& LINE x_start&,y_end&,x_start&,y_start& UNTIL MOUSEK<>1 x_start&=x_start&/16 y_start&=y_start&/16 x_end&=(x_end&/16)+1 !si bug rajouter 1 a x et y_end& y_end&=(y_end&/16)+1 hauteur_du_block&=(y_end&-y_start&)-1 largeur_du_block&=(x_end&-x_start&) block_buffer2%=block_buffer% copie_dans_buffer2: adr_ds_map_du_buffer%=V:bugbuster$+((x_start&+(y_pick&+y_start&)*20)*2) BMOVE adr_ds_map_du_buffer%,block_buffer2%,largeur_du_block&*2 ADD block_buffer2%,largeur_du_block&*2 INC y_start& IF y_start&<y_end& GOTO copie_dans_buffer2 ENDIF fin_get_block2: REPEAT UNTIL MOUSEK=0 DEFMOUSE 0 BMOVE sav_screen%,XBIOS(3),32000 RETURN